Хорошо, если вы не хотите менять свои перья и просматривать иерархию, как предложил Дэвид С., этот метод сделает это за вас. Чтобы добавить закругленные углы и тени к вашему UIImageView, просто используйте этот метод, например:
[Utils roundCornersForImageView:myImageView withCornerRadius:6.0
andShadowOffset:2.0];
(!) По соображениям производительности я не думаю, что это хорошая идея использовать этот код в чем-то вроде UITableView, поскольку этот код изменяет иерархию представлений. Поэтому я предлагаю изменить ваш наконечник и добавить представление контейнера для эффекта тени и использовать код Davic C.
+ (void)roundCornersForImageView:(UIImageView *)imageView
withCornerRadius:(float)cornerRadius andShadowOffset:(float)shadowOffset
{
const float CORNER_RADIUS = cornerRadius;
const float BORDER_WIDTH = 1.0;
const float SHADOW_OFFSET = shadowOffset;
const float SHADOW_OPACITY = 0.8;
const float SHADOW_RADIUS = 3.0;
//Our old image now is just background image view with shadow
UIImageView *backgroundImageView = imageView;
UIView *superView = backgroundImageView.superview;
//Make wider actual visible rect taking into account shadow
//offset
CGRect oldBackgroundFrame = backgroundImageView.frame;
CGRect newBackgroundFrame = CGRectMake(oldBackgroundFrame.origin.x, oldBackgroundFrame.origin.y, oldBackgroundFrame.size.width + SHADOW_OFFSET, oldBackgroundFrame.size.height + SHADOW_OFFSET);
[backgroundImageView removeFromSuperview];
backgroundImageView.frame = newBackgroundFrame;
//Make new UIImageView with rounded corners and put our old image
CGRect frameForRoundedImageView = CGRectMake(0, 0, oldBackgroundFrame.size.width, oldBackgroundFrame.size.height);
UIImageView *roundedImageView = [[UIImageView alloc]initWithFrame:frameForRoundedImageView];
roundedImageView.image = imageView.image;
[roundedImageView.layer setCornerRadius:CORNER_RADIUS];
[roundedImageView.layer setBorderColor:[UIColor lightGrayColor].CGColor];
[roundedImageView.layer setBorderWidth:BORDER_WIDTH];
[roundedImageView.layer setMasksToBounds:YES];
//Set shadow preferences
[backgroundImageView setImage:nil];
[backgroundImageView.layer setShadowColor:[UIColor blackColor].CGColor];
[backgroundImageView.layer setShadowOpacity:SHADOW_OPACITY];
[backgroundImageView.layer setShadowRadius:SHADOW_RADIUS];
[backgroundImageView.layer setShadowOffset:CGSizeMake(SHADOW_OFFSET, SHADOW_OFFSET)];
//Add out two image views back to the view hierarchy.
[backgroundImageView addSubview:roundedImageView];
[superView addSubview:backgroundImageView];
}
В соответствии со своей конфигурацией агент использует имя «puppetserver» для идентификации и связи с сервером. Его вывод подтверждает это.
Агент успешно создает CSR, отправляет его на компьютер «puppetserver» и получает подписанный сертификат. Это показывает, что он успешно связывается с сервером, и есть все основания ожидать, что сервер примет сертификат, который он только что подписал.
По-видимому, проблема в свидетельстве магистра. Скорее всего, это связано с тем, что машина сервера puppet самоопознается как «puppet.openvpn», так что это, вероятно, имя, для которого выдается сертификат мастера, тогда как агент использует другое имя для связи с мастером. Несоответствие между именем в сертификате и представлением агентом названия машины, с которой он говорит, является хорошей причиной для агента отклонить сертификат.
Возможно, с некоторым вниманием к пользовательской конфигурации, организовать для мастер-сертификата имя, отличное от его собственного представления об имени хоста. Проще, однако, просто соответствовать имени, используемому для идентификации этой машины. И в соответствии с этим я рекомендую постоянно полагаться на полностью квалифицированные имена.
В качестве отдельного вопроса вы также столкнетесь с проблемами при работе с агентами, которые имеют одинаковые имена хостов (т.е. localhost.localdomain), если, опять же, вы не позаботитесь о конфигурации их марионеток, чтобы убедиться, что они используют разные , уникальные имена на своих сертификатах. Путь наименьшего сопротивления состоит в том, чтобы дать собственные имена вашим машинам и сделать это до регистрации их у мастера Puppet.